#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include "messageshowarea.h"
#include "sessionfriendarea.h"
#include "messageeditarea.h"

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWidget;
}
QT_END_NAMESPACE

class MainWidget : public QWidget
{
    Q_OBJECT

private:
    static MainWidget* instance;
    MainWidget(QWidget *parent = nullptr); //懒汉单例模式

public:
    static MainWidget* getInstance();
    ~MainWidget();


private:
    Ui::MainWidget *ui;
    //窗口左侧部分
    QWidget* windowLeft;
    //窗口中间部分
    QWidget* windowMid;
    //窗口右侧部分
    QWidget* windowRight;

    //用户头像
    QPushButton* userAvatar;
    //会话标签页按钮
    QPushButton* sessionTabBtn;
    //好友展示区域
    SessionFriendArea* sessionfriendarea;
    //好友标签页按钮
    QPushButton* friendTabBtn;
    //好友申请页按钮
    QPushButton* applyTabBtn;
    //用户搜索框
    QLineEdit* searchEdit;
    //添加好友按钮
    QPushButton* addFriendBtn;
    //消息展示区
    MessageShowArea* messageShowArea;
    //当前聊天标题
    QLabel* sessionTitleLabel;
    //消息编辑区
    MessageEditArea* messageEditArea;
    //显示会话详情按钮
    QPushButton* extraBtn;


    enum ActiveTab
    {
        SESSION_LIST,
        FRIEND_LIST,
        APPLY_LIST
    };
    ActiveTab activeTab = SESSION_LIST;
public:
    void initMainWindow();
    void initLeftWindow();
    void initMidWindow();
    void initRightWindow();

    void initSignalSlot();
    void initWebsocket();

    void swichTabToSession();
    void swichTabToFriend();
    void swichTabToApply();

    //加载会话列表
    void loadSessionList();
    //加载好友列表
    void loadFriendList();
    //加载好友申请列表
    void loadApplyList();

    //更新好友列表
    void updateFriendList();
    //更新会话列表
    void updateChatSessionList();
    //更新好友申请列表
    void updateFriendApplyList();
    //加载最近的历史消息
    void loadRecentMessage(const QString& chatSessionId);
    //更新最近消息
    void updateRecentMessage(const QString &chatSessionId);
    //切换到好友会话 swichTabToSession只是其中一个环节
    void switchChatSession(const QString& userId);
    //获取消息展示区指针
    MessageShowArea* getMessageShowAreaWidget() const;


};
#endif // MAINWIDGET_H
